<?php
/**
 * 自定义链表接口
 * 链表中结点的位置/索引是从0开始递增，这是正向索引
 * 从最后一个结点往前索引，索引可以定义从-1开始递减，这是反向索引
 */

namespace Xxb\XxbPhpAlgo\Contract;

interface XxbLinkedListInterface
{
    // 链表是否为空
    public function isEmpty();

    // 指定位置添加结点
    public function add($index, $value);

    // 头部添加结点
    public function unshift($value);

    // 尾部添加结点
    public function push($value);

    // 删除某个位置的结点
    public function offsetUnset($index);

    // 删除尾部结点
    public function pop();

    // 删除头部结点
    public function shift();

    // 删除第一次出现某个值的结点
    public function unsetVal($value);

    // 设置某个位置的结点数据
    public function offsetSet($index, $value);

    // 获取某个值首次出现的位置
    public function valueOffsetGet($value);

    // 判断某个值是否存在
    public function valueExists($value);

    // 根据位置获取结点
    public function offsetGet($index);

    // 获取表头结点
    public function bottom();

    // 获取表尾结点
    public function top();

    // 返回链表有几个结点
    public function count();
}
